docs: document automated translation updates - #2410
docs: document automated translation updates#2410Martin Krzykawski (MartinKrzykawski) wants to merge 7 commits into
Conversation
Adds a dedicated article for the two automated halves of the translation workflow that were previously undocumented: - the upstream Crowdin pipeline: how en-GB/de-DE source snippets are collected from shopware/shopware, uploaded to Crowdin, translated and approved by contributors, and downloaded back into shopware/translations including the metadata that installations compare against - the downstream `translation.update` scheduled task: interval, what it does on each run, its requirements, how to inspect, trigger or deactivate it, what it explicitly does not do, and failure handling Cross-links the new page from the built-in translation handling page, the translations index, and the extension points page. Adds the task to the list of default scheduled tasks in the hosting guide and completes the translation section of the command reference. Fixes the command name `snippet:validate` to `translation:validate`.
Developer Docs healthcheckStatus: Completed with |
📊 Documentation Impact Analyzer
Reasons
|
There was a problem hiding this comment.
Pull request overview
Adds missing documentation for Shopware’s automated translation update workflow, covering both the upstream Crowdin/GitHub Actions pipeline and the downstream translation.update scheduled task in Shopware, and wires this new documentation into existing translation-related pages.
Changes:
- Adds a new concept page describing the end-to-end automated translation update chain (Crowdin ↔
shopware/translations↔ Shopware scheduled task). - Adds/adjusts cross-links across translation docs and scheduled task documentation.
- Completes/aligns the command reference for translation-related CLI commands.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| resources/references/core-reference/commands-reference.md | Adds missing translation CLI commands to the command reference table. |
| guides/hosting/infrastructure/scheduled-task.md | Documents translation.update as a default scheduled task and adds contextual notes/linking. |
| concepts/framework/translations/index.md | Adds the new automated translation updates page to the translations section index. |
| concepts/framework/translations/extension-points.md | Fixes the command name to translation:validate and links to the new automation docs. |
| concepts/framework/translations/built-in-translation-system.md | Cross-links to the new automation page and notes the scheduled task behavior. |
| concepts/framework/translations/automated-translation-updates.md | Introduces the new end-to-end documentation page for automated translation updates. |
Comments suppressed due to low confidence (2)
concepts/framework/translations/automated-translation-updates.md:122
- The docs table guidelines recommend introducing tables with a complete sentence (resources/guidelines/documentation-guidelines/04-fonts-and-formats/01-text.md:105). Consider adding an explicit lead-in before this properties table.
| Property | Value |
concepts/framework/translations/automated-translation-updates.md:195
- Per the documentation table guidelines, table rows should not end sentences with punctuation and tables should be introduced with a complete sentence (resources/guidelines/documentation-guidelines/04-fonts-and-formats/01-text.md:101-106). This troubleshooting table currently has no lead-in sentence, and several cells end sentences with periods.
## Troubleshooting
| Symptom | Cause and solution |
|-------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|
| The task never runs | No background worker is consuming the queue. See [Scheduled Task](../../../guides/hosting/infrastructure/scheduled-task.md). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Fix the link in the scheduled task info box: the "built-in translation system" phrase pointed at the automation page instead of the built-in translation handling page. The automation page is now linked from a separate sentence, so each link text matches its target. Also correct the surrounding grammar in that sentence. Introduce the schedule, task properties, and troubleshooting tables with a lead-in sentence, and drop the sentence-final punctuation from the troubleshooting cells, as required by the table rules in resources/guidelines/documentation-guidelines/04-fonts-and-formats/01-text.md.
📊 Documentation Impact Analyzer
Reasons
|
Co-authored-by: Marcel Brode <40024364+marcelbrode@users.noreply.github.com>
Co-authored-by: Marcel Brode <40024364+marcelbrode@users.noreply.github.com>
📊 Documentation Impact Analyzer
Reasons
|
📊 Documentation Impact Analyzer
Reasons
|
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 6 out of 6 changed files in this pull request and generated no new comments.
Suppressed comments (2)
concepts/framework/translations/automated-translation-updates.md:118
- This note asserts the scheduled task is available starting with Shopware 6.7.13.0, but the PR description mentions this version is not confirmed yet. To avoid publishing potentially incorrect version information, please either confirm the exact version before merge or soften the statement to reflect that it’s pending confirmation.
::: info
The scheduled task is available starting with Shopware 6.7.13.0. In older versions, translations are updated only by
running the `translation:update` command.
resources/references/core-reference/commands-reference.md:416
- In this translation commands table, the
translation:pullandtranslation:pushdescription cells end with a period, which conflicts with the documentation guideline to not end table entries with punctuation. Since this PR touches this table section, it’s a good opportunity to make the table consistent by removing the trailing periods.
| `translation:lint-filenames` | Ensures translations have a country-agnostic translation file as a base and renames them with `--fix` |
| `translation:list` | Lists all locales that are configured for `translation:install` and `translation:update` |
| `translation:pull` | Pulls translations from a given provider. |
| `translation:push` | Pushes translations to a given provider. |
Restructure the delivery chain diagram: declare each node label where the node first appears, highlight the repository and project names, and label the last edge "daily by default" instead of "per installation". The schedule table now uses the same wording. The suggested diagram snippet is applied with two deviations, both because mermaid would not render them: a markdown link inside an HTML node label stays plain text, and the edge label drops its backticks, which would otherwise show up as literal characters. Further changes: * State that a source snippet change needs a pull request. * Estimate the Crowdin-to-shop latency in workdays, since the gating step is a maintainer review rather than one of the daily workflows. * Link the Crowdin project once instead of twice. * Do not claim that every official plugin contributes translation files. * Name the repository the release branch belongs to.
📊 Documentation Impact Analyzer
Reasons
|
|
AI Suggestion: The Administration branch (shopware/shopware#18320) introduces a per-language 1. Line 135 — "On every run, the handler refreshes all currently installed translations:" 2. Lines 144–145 — the CLI equivalence claim. 3. Line 185 — add a bullet in "What the task does not do" for the per-language opt-out: 4. Line 201 — Troubleshooting row "The task runs but nothing changes", add the disabled flag as a cause: |
The task calls TranslationUpdater::updateInstalled(), while translation:update drives TranslationMetadataStore and the translation loader directly. They compare the same metadata and update the same locales, but they are not the same service, so the page no longer claims they are.
📊 Documentation Impact Analyzer
Reasons
|
The scheduled task filters languages on `translationAutoUpdate` and only passes the matching locales to the updater, so describe the language query as the first step, note the per-language opt-out, and add the disabled flag as a cause in the troubleshooting table. `translation:update` is not scoped by the flag, so the page states the difference instead of calling the two interchangeable.
|
All four points are in as of f90abdc — since you are adding the Admin UI part as a commit here, both land together and the milestone difference does not matter. I verified the behaviour against #18320 first: What changed:
Two deliberate deviations from your suggestions, both about
|
📊 Documentation Impact Analyzer
Reasons
|
Summary
Documents the automated part of the translation workflow, which was not covered anywhere so far. New article
concepts/framework/translations/automated-translation-updates.mddescribes both halves of the chain:en-GBsource snippets and thede-DEtranslation are collected fromshopware/shopwareintoshopware/translations, uploaded to Crowdin, translated and approved by contributors, anddownloaded back into a reviewed pull request together with the
crowdin-metadata.jsonupdate. Includes the dailyschedule of the three workflows, the entry point for contributors (translate.shopware.com),
why source strings are changed in code instead of in Crowdin, and the known review pitfalls (snippets containing
HTML, diffs in the source languages).
translation.updatescheduled task — default interval, what it does on each run,its requirements (background worker, outbound HTTPS, private filesystem), how to inspect, trigger, or deactivate it,
what it explicitly does not do (install locales, change the
activeflag, override database snippets, removelanguages), failure handling, and a troubleshooting table.
Supporting adjustments:
built-in-translation-system.md, the translationsindex.md, andextension-points.md.translation.updateadded to the default scheduled tasks inguides/hosting/infrastructure/scheduled-task.md,including the note that it only runs when a translation is installed.
translation:update,translation:list,translation:lint-filenames,translation:validate).snippet:validatetotranslation:validateinextension-points.md.Related links
shopware/translationsworkflowsupdate-translations.yml,crowdin-upload.yml,crowdin-download.ymlChecklist
PageRefreferences where relevant..gitbook.yamlif pages were moved, renamed, or deleted. — not applicable, no page was moved or renamed.wordlist.txt(and sorted it) if spellcheck flags new legitimate terms. — not needed, spellcheck passes unchangedNotes
Two points for the reviewer:
time of writing (the task landed on
6.7.13.x). Please confirm the version before merging.trunkconsumes the translation Admin API endpoints from the Administration yet, so the articledeliberately mentions only the CLI. The Administration part is a follow-up and will be documented together with
that implementation.
Verified locally: markdownlint and the spellcheck (
make spellcheck-local) pass, and all relative links, anchors, andPageReftargets resolve. All statements about the task, the commands, and the pipeline were checked against the codein
shopware/shopwareand the workflows onshopware/translations@main.